# Python3 集合
'''
集合（set）是一个无序不重复元素的序列。
可以使用大括号 { } 或者 set() 函数创建集合，注意：创建一个空集合必须用 set() 而不是 { }，因为 { } 是用来创建一个空字典。
创建格式：
parame = {value01,value02,...}
或者
set(value)
'''
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)                      # 这里演示的是去重功能

'orange' in basket                 # 快速判断元素是否在集合内
True
'crabgrass' in basket
False
# 下面展示两个集合间的运算.
a = set('abracadabra')
b = set('alacazam')
print(a)            
print(a - b )                              # 集合a中包含元素
print(a | b )                             # 集合a或b中包含的所有元素
print(a & b)                              # 集合a和b中都包含了的元素
print(a ^ b)                               # 不同时包含于a和b的元素
# 类似列表推导式，同样集合支持集合推导式(Set comprehension):
a = {x for x in 'abracadabra' if x not in 'abc'}
print(a)
# 集合的基本操作
# 1、添加元素
# 语法格式如下：s.add( x )将元素 x 添加到集合 s 中，如果元素已存在，则不进行任何操作。
thisset = set(("Google", "Runoob", "Taobao"))
thisset.add("Facebook")
print(thisset)
# 也可以添加元素，且参数可以是列表，元组，字典等，语法格式如下：s.update( x )
# x 可以有多个，用逗号分开。
thisset = set(("Google", "Runoob", "Taobao"))
thisset.update({1,3})
print(thisset)
thisset.update([1,4],[5,6])  
print(thisset)
# 2、移除元素
# 语法格式如下：s.remove( x )将元素 x 添加到集合 s 中移除，如果元素不存在，则会发生错误。
thisset = set(("Google", "Runoob", "Taobao"))
thisset.remove("Taobao")
print(thisset)
# thisset.remove("Facebook")   # 不存在会发生错误
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# KeyError: 'Facebook'
# 此外还有一个方法也是移除集合中的元素，且如果元素不存在，不会发生错误。格式如下所示：
# s.discard( x )
thisset = set(("Google", "Runoob", "Taobao"))
thisset.discard("Facebook")  # 不存在不会发生错误
print(thisset)
# 也可以设置随机删除集合中的一个元素，语法格式如下：s.pop() 
thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
thisset.pop()
print(thisset)
# 3、计算集合元素个数
# 语法格式如下：len(s)计算集合 s 元素个数。
thisset = set(("Google", "Runoob", "Taobao"))
print(len(thisset))
# 4、清空集合
# 语法格式如下：s.clear()清空集合 s。
thisset = set(("Google", "Runoob", "Taobao"))
thisset.clear()
print(thisset)
# 5、判断元素是否在集合中存在
# 语法格式如下：x in s
# 判断元素 s 是否在集合 x 中存在，存在返回 True，不存在返回 False。
thisset = set(("Google", "Runoob", "Taobao"))
a="Runoob" in thisset
print(a)
b="Facebook" in thisset
print(b)
# s.update( "字符串" ) 与 s.update( {"字符串"} ) 含义不同:
# s.update( {"字符串"} ) 将字符串添加到集合中。
# s.update( "字符串" ) 将字符串拆分单个字符后，然后再一个个添加到集合中，有重复的会忽略。
thisset = set(("Google", "Runoob", "Taobao"))
print(thisset)
thisset.update({"Facebook"})
print(thisset) 
thisset.update("Yahoo")
print(thisset)



